package com.edu.compile.compiler;

import com.edu.compile.AbstractCompileResult;
import com.edu.compile.AbstractCompilerParser;
import com.edu.compile.config.RedisConfig;
import com.edu.compile.datasource.DefaultRedisDataSource;
import com.edu.compile.dto.redis.RedisNodeMetadata;
import com.edu.compile.template.ftl.node.Redis;
import com.edu.model.constant.EventConstant;
import com.edu.model.dto.NodeMetadata;
import org.springframework.stereotype.Component;

@Component("redis_compiler")
public class RedisCompiler extends AbstractCompilerParser<RedisConfig, Redis> {

    @Override
    public void compile(AbstractCompileResult abstractCompileResult, NodeMetadata nodeMetadata, RedisConfig redisConfig, Redis redis) {

//        boolean loop = abstractCompileResult.isLoop();
//        CompileResult compileResult = (CompileResult) abstractCompileResult;
//        Redis redis = compileResult.getEventContainer().getNodeTemplateModel(redisNodeDto.getNodeId());
//        redis.setLoop(loop);
//
//        String nodeId = redisNodeDto.getNodeId();
//        addDataSource(abstractCompileResult, redisNodeDto);
//        String methodPrefix = getMethodPrefix(eventId);
//
//        Integer opeType = redisNodeDto.getRedisParam().getOpeType();
//        redis.setOpeType(opeType);
//        Integer keySource = redisNodeDto.getRedisParam().getKeySource();
//        String keySourceValue = redisNodeDto.getRedisParam().getKeySourceValue();
//        Integer source = redisNodeDto.getRedisParam().getSource();
//        String sourceValue = redisNodeDto.getRedisParam().getSourceValue();
//
//        String key = parseKey(abstractCompileResult, keySource, keySourceValue, methodPrefix);
//        redis.setKey(key);
//        if (EventConstant.DbConstant.INSERT == opeType) {
//            String value = parseKey(abstractCompileResult, source, sourceValue, methodPrefix);
//            redis.setValue(value);
//        }
//
//        next(abstractCompileResult, eventId, nodeId);
    }

    protected void addDataSource(AbstractCompileResult abstractCompileResult, RedisNodeMetadata redisNodeDto) {
        abstractCompileResult.addDataSource(DefaultRedisDataSource.init(redisNodeDto.getNodeId(), EventConstant.DataSourceParseType.DEFAULT_REDIS));
    }

    public String parseKey(AbstractCompileResult abstractCompileResult, Integer keySource, String keySourceValue, String methodName) {
        String key = keySourceValue;
        if (keySource == EventConstant.SourceConstant.FRO) {
            key = replaceParam(abstractCompileResult, key, methodName);
        } else {
            key = "'" + key + "'";
        }

        return key;
    }
}
